#pragma once

// Copyright (c) 2010 Manuel Peinado Gallego <manuel.peinado@gmail.com>
// Distributed under the MIT license

// UI.h : interface of the UI class
//

#include "SelectionManager.h"
#include "ActionManager.h"
#include "LogManager.h"
#include "WorldFollower.h"
#include "UiFollower.h"
#include <set>

class Ui : boost::noncopyable, public WorldFollower
{
public:

    Ui(World* world);
    ~Ui();

    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    SelectionManager& getSelectionManager();
    ActionManager& getActionManager();
    LogManager& getLogManager();

    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    
    // TODO add remove functionality 

    void addWorldFollower(WorldFollower* view);

    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    // TODO add remove functionality 

    void addUiFollower(UiFollower* view);

    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

protected:

    SelectionManager m_selectionManager;
    ActionManager m_actionManager;
    LogManager m_logManager;

    std::set<WorldFollower*> m_worldFollowers;
    std::set<UiFollower*> m_uiFollowers;
};

